home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Tools / ppls / ppls.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  2.2 KB  |  152 lines

  1. /* ppls: pp version of ls to test directory routines */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Tools/ppls/RCS/ppls.c,v 6.0 1991/12/18 20:32:36 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Tools/ppls/RCS/ppls.c,v 6.0 1991/12/18 20:32:36 jpo Rel $
  9.  *
  10.  * $Log: ppls.c,v $
  11.  * Revision 6.0  1991/12/18  20:32:36  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16. #include "util.h"
  17. #include <varargs.h>
  18. #include <sys/stat.h>
  19. #include <isode/usr.dirent.h>
  20.  
  21.  
  22. char    *myname;
  23. static int    selection ();
  24. static void adios (), advise ();
  25. extern int alphasort ();
  26.  
  27. main (argc, argv)
  28. int    argc;
  29. char    **argv;
  30. {
  31.     extern char    *optarg;
  32.     extern int    optind;
  33.     int    opt;
  34.  
  35.     myname = argv[0];
  36.     while((opt = getopt(argc, argv, "")) != EOF)
  37.         switch (opt) {
  38.             default:
  39.             fprintf (stderr, "Usage: %s", myname);
  40.             break;
  41.         }
  42.     argc -= optind;
  43.     argv += optind;
  44.  
  45.     if (argc == 0)
  46.         dols (".");
  47.     else while (argc-- > 0) {
  48.         dols(*argv++);
  49.     }
  50.     exit (0);
  51. }
  52.  
  53. dols (directory)
  54. char    *directory;
  55. {
  56.     struct stat st;
  57.     struct dirent **namelist, **dp;
  58.     int num, i;
  59.  
  60.     if (stat (directory, &st) == NOTOK)
  61.         adios (directory, "Can't stat ");
  62.  
  63.     if ((st.st_mode & S_IFMT) != S_IFDIR)
  64.         printf ("%s\n", directory);
  65.  
  66.     num = _scandir (directory, &namelist, selection, alphasort);
  67.     
  68.     if (num == 0)
  69.         return;
  70.  
  71.     for (i = 0, dp = namelist; i < num; i++, dp++)
  72.         printf ("%s\n", (*dp) -> d_name);
  73.     free ((char *)namelist);
  74. }
  75.  
  76. static int selection (dp)
  77. struct dirent *dp;
  78. {
  79.     if (*dp -> d_name == '.')
  80.         return 0;
  81.     return 1;
  82. }
  83.  
  84. #ifndef    lint
  85. static void    _advise ();
  86.  
  87.  
  88. static void    adios (va_alist)
  89. va_dcl
  90. {
  91.     va_list ap;
  92.  
  93.     va_start (ap);
  94.  
  95.     _advise (ap);
  96.  
  97.     va_end (ap);
  98.  
  99.     _exit (1);
  100. }
  101. #else
  102. /* VARARGS */
  103.  
  104. static void    adios (what, fmt)
  105. char   *what,
  106.        *fmt;
  107. {
  108.     adios (what, fmt);
  109. }
  110. #endif
  111.  
  112.  
  113. #ifndef    lint
  114. static void    advise (va_alist)
  115. va_dcl
  116. {
  117.     va_list ap;
  118.  
  119.     va_start (ap);
  120.  
  121.     _advise (ap);
  122.  
  123.     va_end (ap);
  124. }
  125.  
  126.  
  127. static void  _advise (ap)
  128. va_list    ap;
  129. {
  130.     char    buffer[BUFSIZ];
  131.  
  132.     asprintf (buffer, ap);
  133.  
  134.     (void) fflush (stdout);
  135.  
  136.     fprintf (stderr, "%s: ", myname);
  137.     (void) fputs (buffer, stderr);
  138.     (void) fputc ('\n', stderr);
  139.  
  140.     (void) fflush (stderr);
  141. }
  142. #else
  143. /* VARARGS */
  144.  
  145. static void    advise (what, fmt)
  146. char   *what,
  147.        *fmt;
  148. {
  149.     advise (what, fmt);
  150. }
  151. #endif
  152.